#ifndef __ETAT_H__
#define __ETAT_H__

#include <stdlib.h>



/**  Structure   Etat 
 *   Décrit  une étape particulière de la recherche des  solutions d'un problème
 *   en utilisant un algorithme d'énumération progressive des solutions possibles
 */ 


typedef struct etat {

  // Les  données composant cette structure dépendent du type de problème traité
  // Leur choix dépend d'un compromis entre efficacité du calcul et espace mémoire utilisé.
  //  Ce choix conditionne la possibilité d'appliquer ou non certaines stratégies de résolution.
    int grilleComplete [81];
    int* sousGrilles [9][9];
    int* lignes [9][9];
    int* colonnes [9][9];
    int possibilitesGrille [81][9];

} Etat;

/** Fonction   libérer Etat
 *  détruit un état et récupère correctement la mémoire correspondante
 *  La signature  attendue serait de la forme
 *
 *  void libererEtat(Etat *e) ;
 *   où e est l'etat à supprimer
 *
 *  En fait  on utilise une une macro pour garder l'encapsulation tout en
 *  évitant la lourdeur d'un appel de fonction
 *
 *  Attention la macro doit être redéfinie lorsque la structure précise de la structure Etat a été modifiée
 */ 


#define libererEtat(e) {free(e);}

#endif

